package com.xyy.saas.payment.adpater.jd.vo.aggrate;

import com.xyy.saas.payment.adpater.jd.common.JDConstants;
import com.xyy.saas.payment.common.exception.PaymentException;
import com.xyy.saas.payment.cores.enums.ChannelEnum;
import com.xyy.saas.payment.cores.enums.JDPayAccessTypeEnum;
import com.xyy.saas.payment.cores.enums.JDPaySceneTypeEnum;
import com.xyy.saas.payment.cores.enums.JDPayTradeTypeEnum;
import com.xyy.saas.payment.payment.core.dto.PayDto;
import lombok.*;

import java.io.Serializable;

/**
 * 三方聚合下单请求
 */
@Builder
@Setter
@Getter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class JdPayAggregateCreateOrderVo implements Serializable {
    /**
     * 二级商户号
     * 必填
     */
    private String merchantNo;
    /**
     * (必填) 商户订单号 - 商户订单号，商户系统内确保唯一
     */
    private String outTradeNo;
    /**
     * (必填) 订单总金额 - 单位分
     */
    private String tradeAmount;
    /**
     * (必填) 订单创建时间 - 时间格式yyyyMMddHHmmss
     */
    private String createDate;
    /**
     * 订单时效时间 分钟 - 单位:分钟 订单有效时长 默认关单时间： 收银台模式 7天 其他  3天
     */
    private String tradeExpiryTime;
    /**
     * (必填) 交易名称
     */
    private String tradeSubject;
    /**
     * (必填) 交易类型
     */
    private String tradeType;
    /**
     * (必填) 交易描述
     */
    private String tradeRemark;
    /**
     * (必填) 用户ip
     */
    private String userIp;
    /**
     * 回传字段
     */
    private String returnParams;
    /**
     * 商品信息list - json串
     */
    private String goodsInfo;
    /**
     * 商户用户标识 - 商户用户标识
     */
    private String userId;
    /**
     * 同步通知页面url - 同步通知页面url
     */
    private String pageBackUrl;
    /**
     * 风控信息-- json串
     */
    private String riskInfo;
    /**
     * 业务标识 - 京东侧分配业务标识
     */
    private String categoryCode;
    /**
     * (必填) 通道业务类型
     */
    private String bizTp;
    /**
     * 订单类型 - p-实物，v-虚拟
     */
    private String orderType;
    /**
     * 收货信息 - ReceiverInfo形式的JSON
     */
    private String receiverInfo;
    /**
     * (必填) 交易场景
     */
    private String sceneType;
    /**
     * 指定支付信息
     */
    private String identity;
    /**
     * 接入方式
     */
    private String accessType;
    /**
     * 子openId - subAppId下的微信、支付宝用户id 当tradeType为AGGRE_WX、AGGRE_ALI时，必填
     */
    private String subOpenId;
    /**
     * 子appId - 商户微信、支付宝appid
     */
    private String subAppId;
    /**
     * (必填) 分帐信息 - JSON串
     */
    private String divisionAccount;
    /**
     * 门店号
     */
    private String storeNum;

    /**
     * 转换请求类型
     */
    public void transType(String logPrefix, PayDto payDto) throws PaymentException {
        // 微信小程序支付
        if (payDto.getChannel().equals(ChannelEnum.JDAGGREGATE_WX.getCode())) {
            tradeType = JDPayTradeTypeEnum.AGGRE_WX.getCode();
            sceneType = JDPaySceneTypeEnum.ONLINE_APP.getCode();
            accessType = JDPayAccessTypeEnum.MINIAPP.getCode();
            subOpenId = (payDto.getMap().containsKey("openId") ? payDto.getMap().get("openId").toString() : "");
            subAppId = JDConstants.aggregateWxAppID(logPrefix, payDto.getBusinessType());
        }
        // 支付宝小程序支付
        else if (payDto.getChannel().equals(ChannelEnum.JDAGGREGATE_ALIPAY.getCode())) {
            tradeType = JDPayTradeTypeEnum.AGGRE_ALI.getCode();
            sceneType = JDPaySceneTypeEnum.ONLINE_APP.getCode();
            accessType = JDPayAccessTypeEnum.MINIAPP.getCode();
            subOpenId = (payDto.getMap().containsKey("buyerId") ? payDto.getMap().get("buyerId").toString() : "");
            subAppId = "2021003155680358";
            merchantNo = "133400097002";
        }
    }

}
